package com.smh.demo1.a19;

import org.springframework.core.DefaultParameterNameDiscoverer;
import org.springframework.core.LocalVariableTableParameterNameDiscoverer;

import java.lang.reflect.Method;
import java.lang.reflect.Parameter;

/**
 * @author shiminghui
 * @date 2025/4/25 9:46
 * @description: 获取参数名称
 */
public class A19Application {
    /**
     * spring 在编译时会自动添加-parameters 参数,大部分IDE会添加-g参数,所以最终用哪个都能拿到参数名
     */
    public static void main(String[] args) throws NoSuchMethodException {
        Method method = Bean1.class.getMethod("test", String.class, int.class);

        // 反射调用
        for (Parameter parameter : method.getParameters()) {
            System.out.println(parameter.getName());
        }
        System.out.println("--------------------------------------");

        // 通过spring的Local
        // 本地变量表不能对接口的方法参数进行保存
        LocalVariableTableParameterNameDiscoverer nameDiscoverer = new LocalVariableTableParameterNameDiscoverer();
        String[] parameterNames = nameDiscoverer.getParameterNames(method);
        for (String parameterName : parameterNames) {
            System.out.println(parameterName);
        }

        // spring提供的结合的api
        DefaultParameterNameDiscoverer nameDiscoverer1 = new DefaultParameterNameDiscoverer();
        String[] parameterNames1 = nameDiscoverer1.getParameterNames(method);
        for (String s : parameterNames1) {
            System.out.println(s);
        }
    }
}
